package com.securityjava.controller;

import com.securityjava.model.Admin;
import com.securityjava.security.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 登录、注册api
 */
@RestController
@CrossOrigin
public class LoginController {



    @Autowired
    private LoginService loginService;

    @Autowired
    private PasswordEncoder passwordEncoder;

    /**
     * 登录接口
     */
    @PostMapping("/login")
    public Map login(@RequestBody Admin admin) throws Exception {
        //获取前端传过来的账号密码，将账号密码传入到登录逻辑处理类LoginService进行逻辑处理
        return loginService.login(admin.getUsername(), admin.getPassword());
    }
    /**
     * 注册接口
     */
    @PostMapping("/register")
    public String register(@RequestBody Admin admin) {
//        Admin admin1 = adminService.selectNameUser(admin.getUsername());
//        if (admin1 == null) {
//            Admin admin2 = new Admin();
//            // 调用加密器将前端传递过来的密码进行加密
//            admin2.setPassword(passwordEncoder.encode(admin.getPassword()));
//            admin2.setUsername(admin.getUsername());
//            // 将用户实体对象添加到数据库
//            int i = adminService.addUser(admin2);
//            if (i > 0) {
//                return "注册成功";
//            } else {
//                return "请联系管理员";
//            }
//        }
        return "用户名已存在";
    }
    /**
     * 多个权限使用说明
     * 必须有全部的权限才可以访问
     * @PreAuthorize("hasRole('ROLE_admin') and hasAnyRole('ROLE_user')")
     * 至少有一个即可访问
     * @PreAuthorize("hasRole('ROLE_admin') or hasAnyRole('ROLE_user')")
     * 单个权限使用说明
     * @PreAuthorize("hasRole('ROLE_select')") 需要ROLE_select角色才可访问
     * @PreAuthorize("hasAuthority('select')") 需要select权限才可访问
     */
    @PreAuthorize("hasRole('ROLE_user')")
    @GetMapping("/user")
    public String user() {
        return "您拥有ROLE_user角色";
    }

    @PreAuthorize("hasRole('ROLE_root')")
    @GetMapping("/root")
    public String root() {
        return "您拥有ROLE_root角色";
    }

    @PreAuthorize("hasAuthority('select')")
    @GetMapping("/select")
    public String select() {
        return "您拥有查询权限";
    }

    @PreAuthorize("hasAuthority('update')")
    @GetMapping("/update")
    public String update() {
        return "您拥有修改权限";
    }

    @PreAuthorize("hasAuthority('insert')")
    @GetMapping("/insert")
    public String insert() {
        return "您拥有添加权限";
    }

    @PreAuthorize("hasAuthority('deleted')")
    @GetMapping("/deleted")
    public String deleted() {
        return "您拥有删除权限";
    }

}
